package main

import (
	"net/http"

	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
)

/*
在上面import "github.com/gin-gonic/gin"后，后执行go mod tidy会自动在go.mod中添加一堆require
*/

// 定义日志中间件
func mwLogger() gin.HandlerFunc {
	return func(ctx *gin.Context) {

	}
}

// 定义验证中间件
func mwBasicAuth(acc, pswd string) gin.HandlerFunc {
	return func(c *gin.Context) {
		u, p, _ := c.Request.BasicAuth()
		if !(u == acc && p == pswd) {
			c.AbortWithStatus(http.StatusUnauthorized)
		}
	}
}

func main() {
	gin.SetMode(gin.ReleaseMode)
	r := gin.New()
	//r := gin.Default() // 返回一个Engine实例，它已配置了默认的Logger和Recovery中间件。

	// Use：添加请求处理的中间件。
	// 跨域访问设置和默认Recovery
	r.Use(
		cors.New((cors.Config{
			AllowAllOrigins: true,                                                // 允许来自所有页面的跨域请求
			AllowMethods:    []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, // 允许的跨域方法
			AllowHeaders:    []string{"*"},                                       // 用在对预请求的响应中，指示请求的响应中可以使用哪些HTTP头。
		})),
		gin.Recovery(), // 默认的异常处理程序，当发生异常时返回500给客户端。
	)

	// 记录访问日志
	r.Use(mwLogger())

	// 设置路由组(RouterGroup)：http://127.0.0.1:4210/someprefix/config
	router := r.Group("")
	router = router.Group("/someprefix")
	config := router.Group("/config")

	r.StaticFS("/static", http.Dir("./dist"))

	// "config"路由组需要验证
	config.Use(mwBasicAuth("admin", "alongpswd"))

	// 注册GET/POST/PUT路由
	registerConfig(config)

	// 在4210端口上运行这个HTTP服务。
	r.Run(":4210")
}
